package gaej.example.contact.server;

import gaej.example.contact.client.Uitvoering;
import gaej.example.contact.client.Persoon;

import java.util.List;

import javax.jdo.PersistenceManager;
import gaej.example.contact.server.PmfSingleton;

public class UitvoeringDAOJdo implements UitvoeringDAO {

	public void addUitvoering(Uitvoering uitvoering) {
		PersistenceManager pm = PmfSingleton.get().getPersistenceManager();
		try {
			pm.makePersistent(uitvoering);
		} finally {
			pm.close();
		}
	}

	@SuppressWarnings("unchecked")
	public List<Uitvoering> listUitvoeringen() {
		PersistenceManager pm = PmfSingleton.get().getPersistenceManager();
		String query = "select from " + Uitvoering.class.getName();
		return (List<Uitvoering>) pm.newQuery(query).execute();
	}

	public void removeUitvoering(Uitvoering uitvoering) {
		PersistenceManager pm =PmfSingleton.get().getPersistenceManager();
		try {
			pm.currentTransaction().begin();

			// We don't have a reference to the selected Object.
			// So we have to look it up first,
			uitvoering = pm.getObjectById(Uitvoering.class, uitvoering.getUitvoeringNr());
			pm.deletePersistent(uitvoering);

			pm.currentTransaction().commit();
		} catch (Exception ex) {
			pm.currentTransaction().rollback();
			throw new RuntimeException(ex);
		} finally {
			pm.close();
		}
	}

	public void updateUitvoering(Uitvoering uitvoering) {
		PersistenceManager pm = PmfSingleton.get().getPersistenceManager();

		String datum = uitvoering.getDatum();
		String schouwburg = uitvoering.getSchouwburg();
		Long muziekstukNr = uitvoering.getMuziekstukNr();
		Long dirigentNr = uitvoering.getDirigentNr();

		try {
			pm.currentTransaction().begin();
			// We don't have a reference to the selected Product.
			// So we have to look it up first,
			uitvoering = pm.getObjectById(Uitvoering.class, uitvoering.getUitvoeringNr());
			uitvoering.setDatum(datum);
			uitvoering.setSchouwburg(schouwburg);
			uitvoering.setMuziekstukNr(muziekstukNr);
			uitvoering.setDirigentNr(dirigentNr);
			
			pm.makePersistent(uitvoering);
			pm.currentTransaction().commit();
		} catch (Exception ex) {
			pm.currentTransaction().rollback();
			throw new RuntimeException(ex);
		} finally {
			pm.close();
		}
	}

}
